package com.mzy.multithreading.sync;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author mzy
 * @Date 2022/7/28 7:39
 * @Version 1.0
 */

/**
 * 需求，3个售货员，卖出30张票
 */

/**
 * 创建线程的多种方式：
 * 1.继承Thread类 （少用，单继承）
 * 2.实现Runnable接口
 * 3.使用Callable接口
 * 4.使用线程池
 */
public class SaleTicket {
    // 第二步  创建多线程，调用资源类的操作方法
    public static void main(String[] args) {
    // 创建Ticket对象
        Ticket ticket = new Ticket();
        // 创建三个线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                // 调用卖票方法
                for (int i = 0; i < 40; i++) {
                    ticket.sale();

                }
            }
        },"AA").start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                // 调用卖票方法
                for (int i = 0; i < 40; i++) {
                    ticket.sale();

                }
            }
        },"BB").start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                // 调用卖票方法
                for (int i = 0; i < 40; i++) {
                    ticket.sale();

                }
            }
        },"CC").start();

    }
}

class Ticket {
    // 第一步创建资源
    // 票数
    private int number = 30;

    // 操作方法： 卖票
    public synchronized void sale() {
        // 判断：是否有票
        if (number > 0) {
            System.out.println(Thread.currentThread().getName() + " : 卖出：" + (number--) + " 剩下： " + number);
        }
    }
}
